/** 
  * ECMAScript缺陷:1.没有模块系统 2.标准库少 3.没有标准接口 4.缺乏管理系统
  * 
  * CommonJS:模块引用/模块定义/模块标识
  * 
  * 模块化:
  *  ! - 在Node中,一个js文件就是一个模块
  *  ! - 在Node中,每一个js文件的代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问
  * 
  * ? 使用require()引入外部模块时,使用的就是模块标识,可以通过模块标识找到指定的模块
  * ? 模块分为两类:
  *   ? 核心模块:由node引擎提供的模块,核心模块的标识就是模块的名字(如fs)
  *   ? 文件模块:由用户自己创建的模块
  * 
  */

console.log('我是一个模块');

// todo 在node中,通过require()函数引入外部的模块
// todo require()可以传递一个文件的路径作为参数,node将会自动根据该路径引入外部模块,这里的路径,如果使用相对路径,必须以.或..开头
// todo 使用require()引入模块后,该函数会返回一个对象,这个对象代表的是引入的模块
var md = require('./外部module.js');
// 接收外部暴露的属性
console.log('md', md);
console.log('md.x', md.x); //10

var math = require('./math.js');
console.log('math add', math.add(1, 2)); //3
console.log('math mul', math.mul(1, 2)); //2

var fs = require('fs');
console.log('fs', fs);
